/***********************************************************

Copyright 1987, 1998  The Open Group

Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.

Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.

DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

******************************************************************/

#include <dix-config.h>

#include <X11/keysym.h>

#include "dix/dix_priv.h"
#include "include/dix.h"

typedef struct _builtinColor {
    unsigned char red;
    unsigned char green;
    unsigned char blue;
    const char *name;
} BuiltinColor;

static const BuiltinColor BuiltinColors[] = {
/*    R    G    B     name                  */
    { 240, 248, 255, "alice blue"             },
    { 240, 248, 255, "AliceBlue"              },
    { 250, 235, 215, "antique white"          },
    { 250, 235, 215, "AntiqueWhite"           },
    { 255, 239, 219, "AntiqueWhite1"          },
    { 238, 223, 204, "AntiqueWhite2"          },
    { 205, 192, 176, "AntiqueWhite3"          },
    { 139, 131, 120, "AntiqueWhite4"          },
    {   0, 255, 255, "aqua"                   },
    { 127, 255, 212, "aquamarine"             },
    { 127, 255, 212, "aquamarine1"            },
    { 118, 238, 198, "aquamarine2"            },
    { 102, 205, 170, "aquamarine3"            },
    {  69, 139, 116, "aquamarine4"            },
    { 240, 255, 255, "azure"                  },
    { 240, 255, 255, "azure1"                 },
    { 224, 238, 238, "azure2"                 },
    { 193, 205, 205, "azure3"                 },
    { 131, 139, 139, "azure4"                 },
    { 245, 245, 220, "beige"                  },
    { 255, 228, 196, "bisque"                 },
    { 255, 228, 196, "bisque1"                },
    { 238, 213, 183, "bisque2"                },
    { 205, 183, 158, "bisque3"                },
    { 139, 125, 107, "bisque4"                },
    {   0,   0,   0, "black"                  },
    { 255, 235, 205, "blanched almond"        },
    { 255, 235, 205, "BlanchedAlmond"         },
    {   0,   0, 255, "blue"                   },
    { 138,  43, 226, "blue violet"            },
    {   0,   0, 255, "blue1"                  },
    {   0,   0, 238, "blue2"                  },
    {   0,   0, 205, "blue3"                  },
    {   0,   0, 139, "blue4"                  },
    { 138,  43, 226, "BlueViolet"             },
    { 165,  42,  42, "brown"                  },
    { 255,  64,  64, "brown1"                 },
    { 238,  59,  59, "brown2"                 },
    { 205,  51,  51, "brown3"                 },
    { 139,  35,  35, "brown4"                 },
    { 222, 184, 135, "burlywood"              },
    { 255, 211, 155, "burlywood1"             },
    { 238, 197, 145, "burlywood2"             },
    { 205, 170, 125, "burlywood3"             },
    { 139, 115,  85, "burlywood4"             },
    {  95, 158, 160, "cadet blue"             },
    {  95, 158, 160, "CadetBlue"              },
    { 152, 245, 255, "CadetBlue1"             },
    { 142, 229, 238, "CadetBlue2"             },
    { 122, 197, 205, "CadetBlue3"             },
    {  83, 134, 139, "CadetBlue4"             },
    { 127, 255,   0, "chartreuse"             },
    { 127, 255,   0, "chartreuse1"            },
    { 118, 238,   0, "chartreuse2"            },
    { 102, 205,   0, "chartreuse3"            },
    {  69, 139,   0, "chartreuse4"            },
    { 210, 105,  30, "chocolate"              },
    { 255, 127,  36, "chocolate1"             },
    { 238, 118,  33, "chocolate2"             },
    { 205, 102,  29, "chocolate3"             },
    { 139,  69,  19, "chocolate4"             },
    { 255, 127,  80, "coral"                  },
    { 255, 114,  86, "coral1"                 },
    { 238, 106,  80, "coral2"                 },
    { 205,  91,  69, "coral3"                 },
    { 139,  62,  47, "coral4"                 },
    { 100, 149, 237, "cornflower blue"        },
    { 100, 149, 237, "CornflowerBlue"         },
    { 255, 248, 220, "cornsilk"               },
    { 255, 248, 220, "cornsilk1"              },
    { 238, 232, 205, "cornsilk2"              },
    { 205, 200, 177, "cornsilk3"              },
    { 139, 136, 120, "cornsilk4"              },
    { 220,  20,  60, "crimson"                },
    {   0, 255, 255, "cyan"                   },
    {   0, 255, 255, "cyan1"                  },
    {   0, 238, 238, "cyan2"                  },
    {   0, 205, 205, "cyan3"                  },
    {   0, 139, 139, "cyan4"                  },
    {   0,   0, 139, "dark blue"              },
    {   0, 139, 139, "dark cyan"              },
    { 184, 134,  11, "dark goldenrod"         },
    { 169, 169, 169, "dark gray"              },
    {   0, 100,   0, "dark green"             },
    { 169, 169, 169, "dark grey"              },
    { 189, 183, 107, "dark khaki"             },
    { 139,   0, 139, "dark magenta"           },
    {  85, 107,  47, "dark olive green"       },
    { 255, 140,   0, "dark orange"            },
    { 153,  50, 204, "dark orchid"            },
    { 139,   0,   0, "dark red"               },
    { 233, 150, 122, "dark salmon"            },
    { 143, 188, 143, "dark sea green"         },
    {  72,  61, 139, "dark slate blue"        },
    {  47,  79,  79, "dark slate gray"        },
    {  47,  79,  79, "dark slate grey"        },
    {   0, 206, 209, "dark turquoise"         },
    { 148,   0, 211, "dark violet"            },
    {   0,   0, 139, "DarkBlue"               },
    {   0, 139, 139, "DarkCyan"               },
    { 184, 134,  11, "DarkGoldenrod"          },
    { 255, 185,  15, "DarkGoldenrod1"         },
    { 238, 173,  14, "DarkGoldenrod2"         },
    { 205, 149,  12, "DarkGoldenrod3"         },
    { 139, 101,   8, "DarkGoldenrod4"         },
    { 169, 169, 169, "DarkGray"               },
    {   0, 100,   0, "DarkGreen"              },
    { 169, 169, 169, "DarkGrey"               },
    { 189, 183, 107, "DarkKhaki"              },
    { 139,   0, 139, "DarkMagenta"            },
    {  85, 107,  47, "DarkOliveGreen"         },
    { 202, 255, 112, "DarkOliveGreen1"        },
    { 188, 238, 104, "DarkOliveGreen2"        },
    { 162, 205,  90, "DarkOliveGreen3"        },
    { 110, 139,  61, "DarkOliveGreen4"        },
    { 255, 140,   0, "DarkOrange"             },
    { 255, 127,   0, "DarkOrange1"            },
    { 238, 118,   0, "DarkOrange2"            },
    { 205, 102,   0, "DarkOrange3"            },
    { 139,  69,   0, "DarkOrange4"            },
    { 153,  50, 204, "DarkOrchid"             },
    { 191,  62, 255, "DarkOrchid1"            },
    { 178,  58, 238, "DarkOrchid2"            },
    { 154,  50, 205, "DarkOrchid3"            },
    { 104,  34, 139, "DarkOrchid4"            },
    { 139,   0,   0, "DarkRed"                },
    { 233, 150, 122, "DarkSalmon"             },
    { 143, 188, 143, "DarkSeaGreen"           },
    { 193, 255, 193, "DarkSeaGreen1"          },
    { 180, 238, 180, "DarkSeaGreen2"          },
    { 155, 205, 155, "DarkSeaGreen3"          },
    { 105, 139, 105, "DarkSeaGreen4"          },
    {  72,  61, 139, "DarkSlateBlue"          },
    {  47,  79,  79, "DarkSlateGray"          },
    { 151, 255, 255, "DarkSlateGray1"         },
    { 141, 238, 238, "DarkSlateGray2"         },
    { 121, 205, 205, "DarkSlateGray3"         },
    {  82, 139, 139, "DarkSlateGray4"         },
    {  47,  79,  79, "DarkSlateGrey"          },
    {   0, 206, 209, "DarkTurquoise"          },
    { 148,   0, 211, "DarkViolet"             },
    { 255,  20, 147, "deep pink"              },
    {   0, 191, 255, "deep sky blue"          },
    { 255,  20, 147, "DeepPink"               },
    { 255,  20, 147, "DeepPink1"              },
    { 238,  18, 137, "DeepPink2"              },
    { 205,  16, 118, "DeepPink3"              },
    { 139,  10,  80, "DeepPink4"              },
    {   0, 191, 255, "DeepSkyBlue"            },
    {   0, 191, 255, "DeepSkyBlue1"           },
    {   0, 178, 238, "DeepSkyBlue2"           },
    {   0, 154, 205, "DeepSkyBlue3"           },
    {   0, 104, 139, "DeepSkyBlue4"           },
    { 105, 105, 105, "dim gray"               },
    { 105, 105, 105, "dim grey"               },
    { 105, 105, 105, "DimGray"                },
    { 105, 105, 105, "DimGrey"                },
    {  30, 144, 255, "dodger blue"            },
    {  30, 144, 255, "DodgerBlue"             },
    {  30, 144, 255, "DodgerBlue1"            },
    {  28, 134, 238, "DodgerBlue2"            },
    {  24, 116, 205, "DodgerBlue3"            },
    {  16,  78, 139, "DodgerBlue4"            },
    { 178,  34,  34, "firebrick"              },
    { 255,  48,  48, "firebrick1"             },
    { 238,  44,  44, "firebrick2"             },
    { 205,  38,  38, "firebrick3"             },
    { 139,  26,  26, "firebrick4"             },
    { 255, 250, 240, "floral white"           },
    { 255, 250, 240, "FloralWhite"            },
    {  34, 139,  34, "forest green"           },
    {  34, 139,  34, "ForestGreen"            },
    { 255,   0, 255, "fuchsia"                },
    { 220, 220, 220, "gainsboro"              },
    { 248, 248, 255, "ghost white"            },
    { 248, 248, 255, "GhostWhite"             },
    { 255, 215,   0, "gold"                   },
    { 255, 215,   0, "gold1"                  },
    { 238, 201,   0, "gold2"                  },
    { 205, 173,   0, "gold3"                  },
    { 139, 117,   0, "gold4"                  },
    { 218, 165,  32, "goldenrod"              },
    { 255, 193,  37, "goldenrod1"             },
    { 238, 180,  34, "goldenrod2"             },
    { 205, 155,  29, "goldenrod3"             },
    { 139, 105,  20, "goldenrod4"             },
    { 190, 190, 190, "gray"                   },
    {   0,   0,   0, "gray0"                  },
    {   3,   3,   3, "gray1"                  },
    {  26,   26, 26, "gray10"                 },
    { 255, 255, 255, "gray100"                },
    {  28,  28,  28, "gray11"                 },
    {  31,  31,  31, "gray12"                 },
    {  33,  33,  33, "gray13"                 },
    {  36,  36,  36, "gray14"                 },
    {  38,  38,  38, "gray15"                 },
    {  41,  41,  41, "gray16"                 },
    {  43,  43,  43, "gray17"                 },
    {  46,  46,  46, "gray18"                 },
    {  48,  48,  48, "gray19"                 },
    {   5,   5,   5, "gray2"                  },
    {  51,  51,  51, "gray20"                 },
    {  54,  54,  54, "gray21"                 },
    {  56,  56,  56, "gray22"                 },
    {  59,  59,  59, "gray23"                 },
    {  61,  61,  61, "gray24"                 },
    {  64,  64,  64, "gray25"                 },
    {  66,  66,  66, "gray26"                 },
    {  69,  69,  69, "gray27"                 },
    {  71,  71,  71, "gray28"                 },
    {  74,  74,  74, "gray29"                 },
    {   8,   8,   8, "gray3"                  },
    {  77,  77,  77, "gray30"                 },
    {  79,  79,  79, "gray31"                 },
    {  82,  82,  82, "gray32"                 },
    {  84,  84,  84, "gray33"                 },
    {  87,  87,  87, "gray34"                 },
    {  89,  89,  89, "gray35"                 },
    {  92,  92,  92, "gray36"                 },
    {  94,  94,  94, "gray37"                 },
    {  97,  97,  97, "gray38"                 },
    {  99,  99,  99, "gray39"                 },
    {  10,  10,  10, "gray4"                  },
    { 102, 102, 102, "gray40"                 },
    { 105, 105, 105, "gray41"                 },
    { 107, 107, 107, "gray42"                 },
    { 110, 110, 110, "gray43"                 },
    { 112, 112, 112, "gray44"                 },
    { 115, 115, 115, "gray45"                 },
    { 117, 117, 117, "gray46"                 },
    { 120, 120, 120, "gray47"                 },
    { 122, 122, 122, "gray48"                 },
    { 125, 125, 125, "gray49"                 },
    {  13,  13,  13, "gray5"                  },
    { 127, 127, 127, "gray50"                 },
    { 130, 130, 130, "gray51"                 },
    { 133, 133, 133, "gray52"                 },
    { 135, 135, 135, "gray53"                 },
    { 138, 138, 138, "gray54"                 },
    { 140, 140, 140, "gray55"                 },
    { 143, 143, 143, "gray56"                 },
    { 145, 145, 145, "gray57"                 },
    { 148, 148, 148, "gray58"                 },
    { 150, 150, 150, "gray59"                 },
    {  15,  15,  15, "gray6"                  },
    { 153, 153, 153, "gray60"                 },
    { 156, 156, 156, "gray61"                 },
    { 158, 158, 158, "gray62"                 },
    { 161, 161, 161, "gray63"                 },
    { 163, 163, 163, "gray64"                 },
    { 166, 166, 166, "gray65"                 },
    { 168, 168, 168, "gray66"                 },
    { 171, 171, 171, "gray67"                 },
    { 173, 173, 173, "gray68"                 },
    { 176, 176, 176, "gray69"                 },
    {  18,  18,  18, "gray7"                  },
    { 179, 179, 179, "gray70"                 },
    { 181, 181, 181, "gray71"                 },
    { 184, 184, 184, "gray72"                 },
    { 186, 186, 186, "gray73"                 },
    { 189, 189, 189, "gray74"                 },
    { 191, 191, 191, "gray75"                 },
    { 194, 194, 194, "gray76"                 },
    { 196, 196, 196, "gray77"                 },
    { 199, 199, 199, "gray78"                 },
    { 201, 201, 201, "gray79"                 },
    {  20,  20,  20, "gray8"                  },
    { 204, 204, 204, "gray80"                 },
    { 207, 207, 207, "gray81"                 },
    { 209, 209, 209, "gray82"                 },
    { 212, 212, 212, "gray83"                 },
    { 214, 214, 214, "gray84"                 },
    { 217, 217, 217, "gray85"                 },
    { 219, 219, 219, "gray86"                 },
    { 222, 222, 222, "gray87"                 },
    { 224, 224, 224, "gray88"                 },
    { 227, 227, 227, "gray89"                 },
    {  23,  23,  23, "gray9"                  },
    { 229, 229, 229, "gray90"                 },
    { 232, 232, 232, "gray91"                 },
    { 235, 235, 235, "gray92"                 },
    { 237, 237, 237, "gray93"                 },
    { 240, 240, 240, "gray94"                 },
    { 242, 242, 242, "gray95"                 },
    { 245, 245, 245, "gray96"                 },
    { 247, 247, 247, "gray97"                 },
    { 250, 250, 250, "gray98"                 },
    { 252, 252, 252, "gray99"                 },
    {   0, 255,   0, "green"                  },
    { 173, 255,  47, "green yellow"           },
    {   0, 255,   0, "green1"                 },
    {   0, 238,   0, "green2"                 },
    {   0, 205,   0, "green3"                 },
    {   0, 139,   0, "green4"                 },
    { 173, 255,  47, "GreenYellow"            },
    { 190, 190, 190, "grey"                   },
    {   0,   0,   0, "grey0"                  },
    {   3,   3,   3, "grey1"                  },
    {  26,  26,  26, "grey10"                 },
    { 255, 255, 255, "grey100"                },
    {  28,  28,  28, "grey11"                 },
    {  31,  31,  31, "grey12"                 },
    {  33,  33,  33, "grey13"                 },
    {  36,  36,  36, "grey14"                 },
    {  38,  38,  38, "grey15"                 },
    {  41,  41,  41, "grey16"                 },
    {  43,  43,  43, "grey17"                 },
    {  46,  46,  46, "grey18"                 },
    {  48,  48,  48, "grey19"                 },
    {   5,   5,   5, "grey2"                  },
    {  51,  51,  51, "grey20"                 },
    {  54,  54,  54, "grey21"                 },
    {  56,  56,  56, "grey22"                 },
    {  59,  59,  59, "grey23"                 },
    {  61,  61,  61, "grey24"                 },
    {  64,  64,  64, "grey25"                 },
    {  66,  66,  66, "grey26"                 },
    {  69,  69,  69, "grey27"                 },
    {  71,  71,  71, "grey28"                 },
    {  74,  74,  74, "grey29"                 },
    {   8,   8,   8, "grey3"                  },
    {  77,  77,  77, "grey30"                 },
    {  79,  79,  79, "grey31"                 },
    {  82,  82,  82, "grey32"                 },
    {  84,  84,  84, "grey33"                 },
    {  87,  87,  87, "grey34"                 },
    {  89,  89,  89, "grey35"                 },
    {  92,  92,  92, "grey36"                 },
    {  94,  94,  94, "grey37"                 },
    {  97,  97,  97, "grey38"                 },
    {  99,  99,  99, "grey39"                 },
    {  10,  10,  10, "grey4"                  },
    { 102, 102, 102, "grey40"                 },
    { 105, 105, 105, "grey41"                 },
    { 107, 107, 107, "grey42"                 },
    { 110, 110, 110, "grey43"                 },
    { 112, 112, 112, "grey44"                 },
    { 115, 115, 115, "grey45"                 },
    { 117, 117, 117, "grey46"                 },
    { 120, 120, 120, "grey47"                 },
    { 122, 122, 122, "grey48"                 },
    { 125, 125, 125, "grey49"                 },
    {  13,  13,  13, "grey5"                  },
    { 127, 127, 127, "grey50"                 },
    { 130, 130, 130, "grey51"                 },
    { 133, 133, 133, "grey52"                 },
    { 135, 135, 135, "grey53"                 },
    { 138, 138, 138, "grey54"                 },
    { 140, 140, 140, "grey55"                 },
    { 143, 143, 143, "grey56"                 },
    { 145, 145, 145, "grey57"                 },
    { 148, 148, 148, "grey58"                 },
    { 150, 150, 150, "grey59"                 },
    {  15,  15,  15, "grey6"                  },
    { 153, 153, 153, "grey60"                 },
    { 156, 156, 156, "grey61"                 },
    { 158, 158, 158, "grey62"                 },
    { 161, 161, 161, "grey63"                 },
    { 163, 163, 163, "grey64"                 },
    { 166, 166, 166, "grey65"                 },
    { 168, 168, 168, "grey66"                 },
    { 171, 171, 171, "grey67"                 },
    { 173, 173, 173, "grey68"                 },
    { 176, 176, 176, "grey69"                 },
    {  18,  18,  18, "grey7"                  },
    { 179, 179, 179, "grey70"                 },
    { 181, 181, 181, "grey71"                 },
    { 184, 184, 184, "grey72"                 },
    { 186, 186, 186, "grey73"                 },
    { 189, 189, 189, "grey74"                 },
    { 191, 191, 191, "grey75"                 },
    { 194, 194, 194, "grey76"                 },
    { 196, 196, 196, "grey77"                 },
    { 199, 199, 199, "grey78"                 },
    { 201, 201, 201, "grey79"                 },
    {  20,  20,  20, "grey8"                  },
    { 204, 204, 204, "grey80"                 },
    { 207, 207, 207, "grey81"                 },
    { 209, 209, 209, "grey82"                 },
    { 212, 212, 212, "grey83"                 },
    { 214, 214, 214, "grey84"                 },
    { 217, 217, 217, "grey85"                 },
    { 219, 219, 219, "grey86"                 },
    { 222, 222, 222, "grey87"                 },
    { 224, 224, 224, "grey88"                 },
    { 227, 227, 227, "grey89"                 },
    {  23,  23,  23, "grey9"                  },
    { 229, 229, 229, "grey90"                 },
    { 232, 232, 232, "grey91"                 },
    { 235, 235, 235, "grey92"                 },
    { 237, 237, 237, "grey93"                 },
    { 240, 240, 240, "grey94"                 },
    { 242, 242, 242, "grey95"                 },
    { 245, 245, 245, "grey96"                 },
    { 247, 247, 247, "grey97"                 },
    { 250, 250, 250, "grey98"                 },
    { 252, 252, 252, "grey99"                 },
    { 240, 255, 240, "honeydew"               },
    { 240, 255, 240, "honeydew1"              },
    { 224, 238, 224, "honeydew2"              },
    { 193, 205, 193, "honeydew3"              },
    { 131, 139, 131, "honeydew4"              },
    { 255, 105, 180, "hot pink"               },
    { 255, 105, 180, "HotPink"                },
    { 255, 110, 180, "HotPink1"               },
    { 238, 106, 167, "HotPink2"               },
    { 205,  96, 144, "HotPink3"               },
    { 139,  58,  98, "HotPink4"               },
    { 205,  92,  92, "indian red"             },
    { 205,  92,  92, "IndianRed"              },
    { 255, 106, 106, "IndianRed1"             },
    { 238,  99,  99, "IndianRed2"             },
    { 205,  85,  85, "IndianRed3"             },
    { 139,  58,  58, "IndianRed4"             },
    {  75,   0, 130, "indigo"                 },
    { 255, 255, 240, "ivory"                  },
    { 255, 255, 240, "ivory1"                 },
    { 238, 238, 224, "ivory2"                 },
    { 205, 205, 193, "ivory3"                 },
    { 139, 139, 131, "ivory4"                 },
    { 240, 230, 140, "khaki"                  },
    { 255, 246, 143, "khaki1"                 },
    { 238, 230, 133, "khaki2"                 },
    { 205, 198, 115, "khaki3"                 },
    { 139, 134,  78, "khaki4"                 },
    { 230, 230, 250, "lavender"               },
    { 255, 240, 245, "lavender blush"         },
    { 255, 240, 245, "LavenderBlush"          },
    { 255, 240, 245, "LavenderBlush1"         },
    { 238, 224, 229, "LavenderBlush2"         },
    { 205, 193, 197, "LavenderBlush3"         },
    { 139, 131, 134, "LavenderBlush4"         },
    { 124, 252,   0, "lawn green"             },
    { 124, 252,   0, "LawnGreen"              },
    { 255, 250, 205, "lemon chiffon"          },
    { 255, 250, 205, "LemonChiffon"           },
    { 255, 250, 205, "LemonChiffon1"          },
    { 238, 233, 191, "LemonChiffon2"          },
    { 205, 201, 165, "LemonChiffon3"          },
    { 139, 137, 112, "LemonChiffon4"          },
    { 173, 216, 230, "light blue"             },
    { 240, 128, 128, "light coral"            },
    { 224, 255, 255, "light cyan"             },
    { 238, 221, 130, "light goldenrod"        },
    { 250, 250, 210, "light goldenrod yellow" },
    { 211, 211, 211, "light gray"             },
    { 144, 238, 144, "light green"            },
    { 211, 211, 211, "light grey"             },
    { 255, 182, 193, "light pink"             },
    { 255, 160, 122, "light salmon"           },
    {  32, 178, 170, "light sea green"        },
    { 135, 206, 250, "light sky blue"         },
    { 132, 112, 255, "light slate blue"       },
    { 119, 136, 153, "light slate gray"       },
    { 119, 136, 153, "light slate grey"       },
    { 176, 196, 222, "light steel blue"       },
    { 255, 255, 224, "light yellow"           },
    { 173, 216, 230, "LightBlue"              },
    { 191, 239, 255, "LightBlue1"             },
    { 178, 223, 238, "LightBlue2"             },
    { 154, 192, 205, "LightBlue3"             },
    { 104, 131, 139, "LightBlue4"             },
    { 240, 128, 128, "LightCoral"             },
    { 224, 255, 255, "LightCyan"              },
    { 224, 255, 255, "LightCyan1"             },
    { 209, 238, 238, "LightCyan2"             },
    { 180, 205, 205, "LightCyan3"             },
    { 122, 139, 139, "LightCyan4"             },
    { 238, 221, 130, "LightGoldenrod"         },
    { 255, 236, 139, "LightGoldenrod1"        },
    { 238, 220, 130, "LightGoldenrod2"        },
    { 205, 190, 112, "LightGoldenrod3"        },
    { 139, 129,  76, "LightGoldenrod4"        },
    { 250, 250, 210, "LightGoldenrodYellow"   },
    { 211, 211, 211, "LightGray"              },
    { 144, 238, 144, "LightGreen"             },
    { 211, 211, 211, "LightGrey"              },
    { 255, 182, 193, "LightPink"              },
    { 255, 174, 185, "LightPink1"             },
    { 238, 162, 173, "LightPink2"             },
    { 205, 140, 149, "LightPink3"             },
    { 139,  95, 101, "LightPink4"             },
    { 255, 160, 122, "LightSalmon"            },
    { 255, 160, 122, "LightSalmon1"           },
    { 238, 149, 114, "LightSalmon2"           },
    { 205, 129,  98, "LightSalmon3"           },
    { 139,  87,  66, "LightSalmon4"           },
    {  32, 178, 170, "LightSeaGreen"          },
    { 135, 206, 250, "LightSkyBlue"           },
    { 176, 226, 255, "LightSkyBlue1"          },
    { 164, 211, 238, "LightSkyBlue2"          },
    { 141, 182, 205, "LightSkyBlue3"          },
    {  96, 123, 139, "LightSkyBlue4"          },
    { 132, 112, 255, "LightSlateBlue"         },
    { 119, 136, 153, "LightSlateGray"         },
    { 119, 136, 153, "LightSlateGrey"         },
    { 176, 196, 222, "LightSteelBlue"         },
    { 202, 225, 255, "LightSteelBlue1"        },
    { 188, 210, 238, "LightSteelBlue2"        },
    { 162, 181, 205, "LightSteelBlue3"        },
    { 110, 123, 139, "LightSteelBlue4"        },
    { 255, 255, 224, "LightYellow"            },
    { 255, 255, 224, "LightYellow1"           },
    { 238, 238, 209, "LightYellow2"           },
    { 205, 205, 180, "LightYellow3"           },
    { 139, 139, 122, "LightYellow4"           },
    {   0, 255,   0, "lime"                   },
    {  50, 205,  50, "lime green"             },
    {  50, 205,  50, "LimeGreen"              },
    { 250, 240, 230, "linen"                  },
    { 255,  0,  255, "magenta"                },
    { 255,  0,  255, "magenta1"               },
    { 238,  0,  238, "magenta2"               },
    { 205,  0,  205, "magenta3"               },
    { 139,  0,  139, "magenta4"               },
    { 176,  48,  96, "maroon"                 },
    { 255,  52, 179, "maroon1"                },
    { 238,  48, 167, "maroon2"                },
    { 205,  41, 144, "maroon3"                },
    { 139,  28,  98, "maroon4"                },
    { 102, 205, 170, "medium aquamarine"      },
    {   0,   0, 205, "medium blue"            },
    { 186,  85, 211, "medium orchid"          },
    { 147, 112, 219, "medium purple"          },
    {  60, 179, 113, "medium sea green"       },
    { 123, 104, 238, "medium slate blue"      },
    {   0, 250, 154, "medium spring green"    },
    {  72, 209, 204, "medium turquoise"       },
    { 199,  21, 133, "medium violet red"      },
    { 102, 205, 170, "MediumAquamarine"       },
    {   0,   0, 205, "MediumBlue"             },
    { 186,  85, 211, "MediumOrchid"           },
    { 224, 102, 255, "MediumOrchid1"          },
    { 209,  95, 238, "MediumOrchid2"          },
    { 180,  82, 205, "MediumOrchid3"          },
    { 122,  55, 139, "MediumOrchid4"          },
    { 147, 112, 219, "MediumPurple"           },
    { 171, 130, 255, "MediumPurple1"          },
    { 159, 121, 238, "MediumPurple2"          },
    { 137, 104, 205, "MediumPurple3"          },
    {  93,  71, 139, "MediumPurple4"          },
    {  60, 179, 113, "MediumSeaGreen"         },
    { 123, 104, 238, "MediumSlateBlue"        },
    {   0, 250, 154, "MediumSpringGreen"      },
    {  72, 209, 204, "MediumTurquoise"        },
    { 199,  21, 133, "MediumVioletRed"        },
    {  25,  25, 112, "midnight blue"          },
    {  25,  25, 112, "MidnightBlue"           },
    { 245, 255, 250, "mint cream"             },
    { 245, 255, 250, "MintCream"              },
    { 255, 228, 225, "misty rose"             },
    { 255, 228, 225, "MistyRose"              },
    { 255, 228, 225, "MistyRose1"             },
    { 238, 213, 210, "MistyRose2"             },
    { 205, 183, 181, "MistyRose3"             },
    { 139, 125, 123, "MistyRose4"             },
    { 255, 228, 181, "moccasin"               },
    { 255, 222, 173, "navajo white"           },
    { 255, 222, 173, "NavajoWhite"            },
    { 255, 222, 173, "NavajoWhite1"           },
    { 238, 207, 161, "NavajoWhite2"           },
    { 205, 179, 139, "NavajoWhite3"           },
    { 139, 121,  94, "NavajoWhite4"           },
    {   0,   0, 128, "navy"                   },
    {   0,   0, 128, "navy blue"              },
    {   0,   0, 128, "NavyBlue"               },
    { 253, 245, 230, "old lace"               },
    { 253, 245, 230, "OldLace"                },
    { 128, 128,   0, "olive"                  },
    { 107, 142,  35, "olive drab"             },
    { 107, 142,  35, "OliveDrab"              },
    { 192, 255,  62, "OliveDrab1"             },
    { 179, 238,  58, "OliveDrab2"             },
    { 154, 205,  50, "OliveDrab3"             },
    { 105, 139,  34, "OliveDrab4"             },
    { 255, 165,   0, "orange"                 },
    { 255,  69,   0, "orange red"             },
    { 255, 165,   0, "orange1"                },
    { 238, 154,   0, "orange2"                },
    { 205, 133,   0, "orange3"                },
    { 139,  90,   0, "orange4"                },
    { 255,  69,   0, "OrangeRed"              },
    { 255,  69,   0, "OrangeRed1"             },
    { 238,  64,   0, "OrangeRed2"             },
    { 205,  55,   0, "OrangeRed3"             },
    { 139,  37,   0, "OrangeRed4"             },
    { 218, 112, 214, "orchid"                 },
    { 255, 131, 250, "orchid1"                },
    { 238, 122, 233, "orchid2"                },
    { 205, 105, 201, "orchid3"                },
    { 139,  71, 137, "orchid4"                },
    { 238, 232, 170, "pale goldenrod"         },
    { 152, 251, 152, "pale green"             },
    { 175, 238, 238, "pale turquoise"         },
    { 219, 112, 147, "pale violet red"        },
    { 238, 232, 170, "PaleGoldenrod"          },
    { 152, 251, 152, "PaleGreen"              },
    { 154, 255, 154, "PaleGreen1"             },
    { 144, 238, 144, "PaleGreen2"             },
    { 124, 205, 124, "PaleGreen3"             },
    {  84, 139,  84, "PaleGreen4"             },
    { 175, 238, 238, "PaleTurquoise"          },
    { 187, 255, 255, "PaleTurquoise1"         },
    { 174, 238, 238, "PaleTurquoise2"         },
    { 150, 205, 205, "PaleTurquoise3"         },
    { 102, 139, 139, "PaleTurquoise4"         },
    { 219, 112, 147, "PaleVioletRed"          },
    { 255, 130, 171, "PaleVioletRed1"         },
    { 238, 121, 159, "PaleVioletRed2"         },
    { 205, 104, 137, "PaleVioletRed3"         },
    { 139,  71,  93, "PaleVioletRed4"         },
    { 255, 239, 213, "papaya whip"            },
    { 255, 239, 213, "PapayaWhip"             },
    { 255, 218, 185, "peach puff"             },
    { 255, 218, 185, "PeachPuff"              },
    { 255, 218, 185, "PeachPuff1"             },
    { 238, 203, 173, "PeachPuff2"             },
    { 205, 175, 149, "PeachPuff3"             },
    { 139, 119, 101, "PeachPuff4"             },
    { 205, 133,  63, "peru"                   },
    { 255, 192, 203, "pink"                   },
    { 255, 181, 197, "pink1"                  },
    { 238, 169, 184, "pink2"                  },
    { 205, 145, 158, "pink3"                  },
    { 139,  99, 108, "pink4"                  },
    { 221, 160, 221, "plum"                   },
    { 255, 187, 255, "plum1"                  },
    { 238, 174, 238, "plum2"                  },
    { 205, 150, 205, "plum3"                  },
    { 139, 102, 139, "plum4"                  },
    { 176, 224, 230, "powder blue"            },
    { 176, 224, 230, "PowderBlue"             },
    { 160,  32, 240, "purple"                 },
    { 155,  48, 255, "purple1"                },
    { 145,  44, 238, "purple2"                },
    { 125,  38, 205, "purple3"                },
    {  85,  26, 139, "purple4"                },
    { 102,  51, 153, "rebecca purple"         },
    { 102,  51, 153, "RebeccaPurple"          },
    { 255,   0,   0, "red"                    },
    { 255,   0,   0, "red1"                   },
    { 238,   0,   0, "red2"                   },
    { 205,   0,   0, "red3"                   },
    { 139,   0,   0, "red4"                   },
    { 188, 143, 143, "rosy brown"             },
    { 188, 143, 143, "RosyBrown"              },
    { 255, 193, 193, "RosyBrown1"             },
    { 238, 180, 180, "RosyBrown2"             },
    { 205, 155, 155, "RosyBrown3"             },
    { 139, 105, 105, "RosyBrown4"             },
    {  65, 105, 225, "royal blue"             },
    {  65, 105, 225, "RoyalBlue"              },
    {  72, 118, 255, "RoyalBlue1"             },
    {  67, 110, 238, "RoyalBlue2"             },
    {  58,  95, 205, "RoyalBlue3"             },
    {  39,  64, 139, "RoyalBlue4"             },
    { 139,  69,  19, "saddle brown"           },
    { 139,  69,  19, "SaddleBrown"            },
    { 250, 128, 114, "salmon"                 },
    { 255, 140, 105, "salmon1"                },
    { 238, 130,  98, "salmon2"                },
    { 205, 112,  84, "salmon3"                },
    { 139,  76,  57, "salmon4"                },
    { 244, 164,  96, "sandy brown"            },
    { 244, 164,  96, "SandyBrown"             },
    {  46, 139,  87, "sea green"              },
    {  46, 139,  87, "SeaGreen"               },
    {  84, 255, 159, "SeaGreen1"              },
    {  78, 238, 148, "SeaGreen2"              },
    {  67, 205, 128, "SeaGreen3"              },
    {  46, 139,  87, "SeaGreen4"              },
    { 255, 245, 238, "seashell"               },
    { 255, 245, 238, "seashell1"              },
    { 238, 229, 222, "seashell2"              },
    { 205, 197, 191, "seashell3"              },
    { 139, 134, 130, "seashell4"              },
    { 160,  82,  45, "sienna"                 },
    { 255, 130,  71, "sienna1"                },
    { 238, 121,  66, "sienna2"                },
    { 205, 104,  57, "sienna3"                },
    { 139,  71,  38, "sienna4"                },
    { 192, 192, 192, "silver"                 },
    { 135, 206, 235, "sky blue"               },
    { 135, 206, 235, "SkyBlue"                },
    { 135, 206, 255, "SkyBlue1"               },
    { 126, 192, 238, "SkyBlue2"               },
    { 108, 166, 205, "SkyBlue3"               },
    {  74, 112, 139, "SkyBlue4"               },
    { 106,  90, 205, "slate blue"             },
    { 112, 128, 144, "slate gray"             },
    { 112, 128, 144, "slate grey"             },
    { 106,  90, 205, "SlateBlue"              },
    { 131, 111, 255, "SlateBlue1"             },
    { 122, 103, 238, "SlateBlue2"             },
    { 105,  89, 205, "SlateBlue3"             },
    {  71,  60, 139, "SlateBlue4"             },
    { 112, 128, 144, "SlateGray"              },
    { 198, 226, 255, "SlateGray1"             },
    { 185, 211, 238, "SlateGray2"             },
    { 159, 182, 205, "SlateGray3"             },
    { 108, 123, 139, "SlateGray4"             },
    { 112, 128, 144, "SlateGrey"              },
    { 255, 250, 250, "snow"                   },
    { 255, 250, 250, "snow1"                  },
    { 238, 233, 233, "snow2"                  },
    { 205, 201, 201, "snow3"                  },
    { 139, 137, 137, "snow4"                  },
    {   0, 255, 127, "spring green"           },
    {   0, 255, 127, "SpringGreen"            },
    {   0, 255, 127, "SpringGreen1"           },
    {   0, 238, 118, "SpringGreen2"           },
    {   0, 205, 102, "SpringGreen3"           },
    {   0, 139,  69, "SpringGreen4"           },
    {  70, 130, 180, "steel blue"             },
    {  70, 130, 180, "SteelBlue"              },
    {  99, 184, 255, "SteelBlue1"             },
    {  92, 172, 238, "SteelBlue2"             },
    {  79, 148, 205, "SteelBlue3"             },
    {  54, 100, 139, "SteelBlue4"             },
    { 210, 180, 140, "tan"                    },
    { 255, 165,  79, "tan1"                   },
    { 238, 154,  73, "tan2"                   },
    { 205, 133,  63, "tan3"                   },
    { 139,  90,  43, "tan4"                   },
    {   0, 128, 128, "teal"                   },
    { 216, 191, 216, "thistle"                },
    { 255, 225, 255, "thistle1"               },
    { 238, 210, 238, "thistle2"               },
    { 205, 181, 205, "thistle3"               },
    { 139, 123, 139, "thistle4"               },
    { 255,  99,  71, "tomato"                 },
    { 255,  99,  71, "tomato1"                },
    { 238,  92,  66, "tomato2"                },
    { 205,  79,  57, "tomato3"                },
    { 139,  54,  38, "tomato4"                },
    {  64, 224, 208, "turquoise"              },
    {   0, 245, 255, "turquoise1"             },
    {   0, 229, 238, "turquoise2"             },
    {   0, 197, 205, "turquoise3"             },
    {   0, 134, 139, "turquoise4"             },
    { 238, 130, 238, "violet"                 },
    { 208,  32, 144, "violet red"             },
    { 208,  32, 144, "VioletRed"              },
    { 255,  62, 150, "VioletRed1"             },
    { 238,  58, 140, "VioletRed2"             },
    { 205,  50, 120, "VioletRed3"             },
    { 139,  34,  82, "VioletRed4"             },
    { 128, 128, 128, "web gray"               },
    {   0, 128,   0, "web green"              },
    { 128, 128, 128, "web grey"               },
    { 128,   0,   0, "web maroon"             },
    { 128,   0, 128, "web purple"             },
    { 128, 128, 128, "WebGray"                },
    {  0,  128,   0, "WebGreen"               },
    { 128, 128, 128, "WebGrey"                },
    { 128,   0,   0, "WebMaroon"              },
    { 128,   0, 128, "WebPurple"              },
    { 245, 222, 179, "wheat"                  },
    { 255, 231, 186, "wheat1"                 },
    { 238, 216, 174, "wheat2"                 },
    { 205, 186, 150, "wheat3"                 },
    { 139, 126, 102, "wheat4"                 },
    { 255, 255, 255, "white"                  },
    { 245, 245, 245, "white smoke"            },
    { 245, 245, 245, "WhiteSmoke"             },
    { 190, 190, 190, "x11 gray"               },
    {   0, 255,   0, "x11 green"              },
    { 190, 190, 190, "x11 grey"               },
    { 176,  48,  96, "x11 maroon"             },
    { 160,  32, 240, "x11 purple"             },
    { 190, 190, 190, "X11Gray"                },
    {   0, 255,   0, "X11Green"               },
    { 190, 190, 190, "X11Grey"                },
    { 176,  48,  96, "X11Maroon"              },
    { 160,  32, 240, "X11Purple"              },
    { 255, 255,   0, "yellow"                 },
    { 154, 205,  50, "yellow green"           },
    { 255, 255,   0, "yellow1"                },
    { 238, 238,   0, "yellow2"                },
    { 205, 205,   0, "yellow3"                },
    { 139, 139,   0, "yellow4"                },
    { 154, 205,  50, "YellowGreen"            },
};

Bool
dixLookupBuiltinColor(int screen,
                      char *name,
                      unsigned int len,
                      unsigned short *pred,
                      unsigned short *pgreen,
                      unsigned short *pblue)
{
    int low = 0;
    int high = ARRAY_SIZE(BuiltinColors) - 1;

    while (high >= low) {
        int mid = (low + high) / 2;
        const BuiltinColor *c = &BuiltinColors[mid];
        const int currentLen = strlen(c->name);
        const int r = strncasecmp(c->name, name, min(len, currentLen));

        if (r == 0) {
            if (len == currentLen) {
                *pred = c->red * 0x101;
                *pgreen = c->green * 0x101;
                *pblue = c->blue * 0x101;
                return TRUE;
            } else if (len > currentLen) {
                low = mid + 1;
            } else {
                high = mid - 1;
            }
        } else if (r > 0) {
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    return FALSE;
}
